package com.cj.service.impl;

import com.cj.dao.StudentDao;
import com.cj.po.PageInfo;
import com.cj.po.Student;
import com.cj.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 用户Service接口实现类
 */
@Service("studentService") // 将该类标识为服务层组件
@Transactional // 开启事务管理
public class StudentServiceImpl implements StudentService {
    // 注入studentDao
    @Autowired
    private StudentDao studentDao; // 自动注入学生数据访问对象

    /**
     * 分页查询学生信息
     * @param s_name 学生姓名
     * @param s_studentid 学生ID
     * @param s_classid 班级ID
     * @param s_classname 班级名称
     * @param pageIndex 当前页码
     * @param pageSize 每页显示的记录数
     * @return 返回分页信息对象，其中包含学生列表
     */
    @Override
    public PageInfo<Student> findPageInfo(String s_name, Integer s_studentid, Integer s_classid,
                                          String s_classname, Integer pageIndex, Integer pageSize) {
        PageInfo<Student> pi = new PageInfo<Student>(); // 创建分页信息对象
        pi.setPageIndex(pageIndex); // 设置当前页码
        pi.setPageSize(pageSize); // 设置每页显示的记录数

        //获取总条数
        Integer totalCount = studentDao.totalCount(s_name, s_studentid, s_classid, s_classname); // 查询总记录数
        if (totalCount > 0) {
            pi.setTotalCount(totalCount); // 设置总记录数
            // 每一页显示学生信息数
            // currentPage = (pageIndex - 1) * pageSize  当前页码数减1 * 最大条数 = 开始行数
            List<Student> studentList = studentDao.getStudentList(s_name, s_studentid, s_classid, s_classname,
                    (pi.getPageIndex() - 1) * pi.getPageSize(), pi.getPageSize()); // 获取当前页的学生列表
            pi.setList(studentList); // 设置学生列表
        }
        return pi; // 返回分页信息对象
    }

    /**
     * 获取所有学生信息
     * @return 返回学生列表
     */
    @Override
    public List<Student> getAll() {
        List<Student> studentList = studentDao.getAll(); // 查询所有学生信息
        return studentList; // 返回学生列表
    }

    /**
     * 通过ID删除学生信息
     * @param s_id 学生ID
     * @return 删除操作的结果 (可能是删除的记录数)
     */
    @Override
    public int deleteStudent(Integer s_id) {
        return studentDao.deleteStudent(s_id); // 调用数据访问对象删除学生信息
    }

    /**
     * 添加学生信息
     * @param student 学生对象
     * @return 添加操作的结果 (可能是添加的记录数)
     */
    @Override
    public int addStudent(Student student) {
        return studentDao.addStudent(student); // 调用数据访问对象添加学生信息
    }

    /**
     * 修改学生信息
     * @param student 学生对象
     * @return 修改操作的结果 (可能是修改的记录数)
     */
    @Override
    public int updateStudent(Student student) {
        return studentDao.updateStudent(student); // 调用数据访问对象修改学生信息
    }

    /**
     * 根据学生ID查找学生信息
     * @param s_id 学生ID
     * @return 返回对应的学生对象
     */
    @Override
    public Student findStudentById(Integer s_id) {
        Student s = studentDao.findStudentById(s_id); // 查询带有特定ID的学生信息
        return s; // 返回学生对象
    }
}
